The present invention relates to techniques for implementing non-uniform constraints in modulation encoded data, and more particularly, to techniques for providing stronger constraints for modulation encoded data located next to unconstrained information.
A disk drive can write data bits onto a data storage disk such as a magnetic hard disk. The disk drive can also read data bits that have been stored on a data disk. Certain sequences of data bits are difficult to write onto a disk and often cause errors during read-back of the data.
Long recorded data sequences of the same polarity are examples of data bit patterns that are prone to errors. These data sequences correspond to long sequences of binary zeros or binary ones in the NRZ (non return-to-zero) representation, or alternatively to long sequences of binary zeros in the NRZI or PR4 representations. Another example of error prone data bit patterns are long sequences of zeros in alternating positions (e.g., 0a0b0c0d0 . . . , where a, b, c, d may each be 0 or 1) in the PR4 representation
Binary sequences are routinely transformed from one representation to another using precoders and inverse precoders, according to well known techniques. In describing this invention we will represent all binary sequences as PR4 sequences unless otherwise stated. A PR4 representation can be transformed into an NRZI representation by a precoder which convolves with 1/1+D or into an NRZ representation by a precoder which convolves with 1/(1+D2).
It is desirable to eliminate error prone bit sequences in user input data. Eliminating error prone bit sequences ensures reliable operation of the detector and timing loops in a disk drive system. One way to eliminate error prone bit sequences is to substitute the error prone bit sequences with non-error prone bit patterns that are stored in memory in lookup tables. Lookup tables, however, are undesirable for performing substitutions of very long bit sequences, because they require a large amount of memory.
Many disk drives have a modulation encoder. A modulation encoder uses modulation codes to eliminate sequences of bits that are prone to errors.
Maximum transition run (MTR) constrained codes are one specific type of modulation code that are used in conjunction with a 1/(1+D) precoder. With respect to MTR codes, a j constraint refers to the maximum number of consecutive ones in an NRZI representation, a k constraint refers to the maximum number of consecutive zeros in an NRZI representation, and a t constraint refers to the maximum number of consecutive pairs of bits of the same value in an NRZI representation (e.g., aabbccddee . . . ).
Codes that constrain the longest run of zero digits in the PR4 representation of a sequence are said to enforce a G-constraint where G is the longest allowed run of consecutive zeros. A G constrained PR4 representation is mapped to a k-constrained NRZI representation by a 1/(1+D) precoder, where k=G+1.
Codes that constrain the longest run of zero digits in alternate locations in the PR4 representation of a sequence are said to enforce an I-constraint where I is the longest run of zeros in consecutive odd or even locations. An I-constrained sequence is necessarily G-constrained with G=2I. An I constrained PR4 representation is mapped to a t-constrained NRZI representation by a 1/(1+D) precoder, where t=I.
Fibonacci codes are one example of modulation codes that are used by modulation encoders. Fibonacci codes provide an efficient way to impose modulation code constraints on recorded data to eliminate error prone bit sequences. A Fibonacci encoder maps an input number to an equivalent number representation in a Fibonacci base. A Fibonacci encoder maps an input vector with K bits to an output vector with N bits. A Fibonacci encoder uses a base with N vectors, which is stored as an N×K binary matrix. Successive application of Euclid's algorithm to the input vector with respect to the stored base gives an encoded vector of length N.
Disk drives typically have error correction encoders. A Reed-Solomon (RS) encoder is one type of error correction encoder. An RS encoder generates error correction code (ECC) check bytes while a cyclic code generates cyclic redundancy check (CRC) bits or bytes. The CRC encoder inserts CRC check bits or bytes, while the RS encoder inserts ECC check bytes into the data stream before data is written onto a disk. After data is read from the disk, the ECC check bytes are used to correct errors in the data bytes using well known decoding processes. The CRC check bytes are used to validate the corrected data bytes using well known processes.
Modulation encoding can be performed prior to RS encoding or after RS encoding. Performing modulation encoding after RS encoding is referred to as forward concatenation. In forward concatenation, data is initially RS encoded. Then the data, CRC and RS parity are modulation encoded, and the modulation encoded data is written onto a disk. Data is subsequently read from the disk and demodulated. RS decoding is performed after the data is demodulated.
Codewords of an efficient modulation code containing a single bit in error are frequently decoded to data sequences containing many bits in errors. This undesirable property of the modulation decoder is called error propagation. Error propagation decreases the effectiveness of the RS code, because a relatively small number of bit errors present when the data is read from the disk may be multiplied by error propagation into many bits in error at the input to the RS decoder. These errors may overwhelm the correcting capability of the RS code.
Performing modulation encoding prior to RS encoding is referred to as reverse concatenation. Reverse concatenation solves the problem of error propagation, because the RS decoder corrects any errors in the encoded data before that data is demodulated. In most reverse concatenated systems, the RS parity symbols must still be demodulated before the RS code can be decoded. This means that while the effect of error propagation is reduced it is not entirely eliminated.
In some reverse concatenation systems, the RS check bytes are not constrained by modulation encoding in order to keep both overhead and complexity low, and the check bytes are inserted into the data stream after modulation encoding. The benefit of this approach is that the RS parity check symbols are neither encoded nor decoded, and thus error propagation by the modulation decoder is entirely avoided.
FIG. 1A illustrates a reverse concatenation technique of this type. Data is initially encoded by a modulation encoder 101. Modulation encoder 101 generates data 102 that is modulated according to a predetermined constraint. For example, a global constraint may be that modulated data 102 can have no more than 10 consecutive zeros (G=10). The modulated data is then encoded by an RS encoder 103 to generate RS check bytes 104. RS check bytes 104 are unconstrained. For example, check bytes 104 may contain more than 10 consecutive zeros.
Multiplexer 105 inserts the check bytes into the modulated data stream. The combined data stream 107 is then stored on disk 110.
The disadvantage of this approach is that RS parity check symbols when inserted in the data bytes, may create error prone sequences of bits, such as too many consecutive zeros. The insertion of unconstrained check bytes significantly degrades the overall modulation constraint of a modulated data stream.
FIG. 1B illustrates an example of a worst case scenario for the reverse concatenation technique shown in FIG. 1A. For example, assume that the modulation data 102 has a constraint of G=10, and the RS check bytes are 10 bits long. Although only a maximum of 10 consecutive zeros are allowed in the modulated data 102, the combined data stream 107 may violate this constraint with a maximum of 20 consecutive zeros (G=20), as shown in FIG. 1B.
Therefore, it would be desirable to provide techniques for preventing error detection and correction codes from containing error prone bit sequences in reverse concatenation schemes in which the ECC parity data is not encoded.